package org.soderiakelvy.controller.sujeto;

import java.io.Serializable;
import java.util.Map;


import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.model.domain.SucursalVO;
import org.soderiakelvy.model.domain.SujetoVO;
import org.soderiakelvy.model.domain.VisitaVO;
import org.soderiakelvy.model.service.RepartoServicio;
import org.soderiakelvy.model.service.SujetoServicio;
import org.soderiakelvy.model.service.imp.RepartoServicioImp;
import org.soderiakelvy.model.service.imp.SujetoServicioImpl;
import org.soderiakelvy.model.util.ConstantModel;

@ManagedBean
@ViewScoped
public class SujetoEmpresaVisita implements Serializable {
	
	private static final long serialVersionUID = -7275522208480215486L;
	
	//--- SERVICES ---
	private RepartoServicio serviceReparto;
	//----------------
	//--- VO ---
	private SucursalVO sucursal;
	private VisitaVO visita;
	private SujetoVO sujeto;
	//----------
	
	//--- ARRAYS ---
	private String[] diasSeleccionados;
	//--------------
	
	//--- VARIABLES ---	
	private String titulo;
	private boolean isUpdate;
	//-----------------
	
	//--- CONSTRUCTOR ---
	public SujetoEmpresaVisita(){		
		serviceReparto = new RepartoServicioImp();
		getTipoCrud();
	}
	
	private void getTipoCrud(){
		SujetoServicio serSuj = new SujetoServicioImpl();
		FacesContext fc = FacesContext.getCurrentInstance();
		Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
		visita = (VisitaVO) sessionParams.get("visitaUpdateCreate");
		if(visita != null){
			sucursal = visita.getSucursal();
			sujeto = serSuj.getSujetoVO(sucursal.getSujeto());	
			if(visita.getVisitaId() == null){
				titulo="Alta Sujeto - Crear Visita";
				isUpdate = false;
			}else{
				titulo = "Modificar Visita"; 
				isUpdate = true;
				getDiasDeVisita();
			}
		}
	}

	//-------------------
	
	public String guardarVisita(){
		if(isUpdate){
			if(updateVisita()){
				//--Vuelvo al listado de sucursales
				return "sujetoEmpresaSucursalesList.xhtml?faces-redirect=true"; 
			}else return null;
		}else {
			visita.setSucursal(getSucursal());			
			String result = serviceReparto.insertVisita2(visita, getDiasSeleccionados());
			if(result.equals(ConstantModel.SUCCESS)){
				FacesContext fc = FacesContext.getCurrentInstance();
				Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
				sessionParams.put("tipoCrudProducto",Constante.SUJETO_EMPRESA_PRODUCTO_CREATE);
				sessionParams.put("sucursalUpdateCreate",getSucursal());
				return "sujetoEmpresaProducto.xhtml?faces-redirect=true";
			}
			return null;
		}
	}
	
	private boolean updateVisita(){
		String result = serviceReparto.updateVisita2(visita, getDiasSeleccionados());
		if(result.equals(ConstantModel.SUCCESS)){
			return true;
		}else return false;
	}
	
	private void getDiasDeVisita(){
		diasSeleccionados = new String[6];
		
		int k = 0;	
		
		if (visita.getLunes() == 1) {
			diasSeleccionados[k] = "1";
			++k;
		}
		if (visita.getMartes() == 1) {
			diasSeleccionados[k] = "2";
			++k;
		}
		if (visita.getMiercoles() == 1) {
			diasSeleccionados[k] = "3";
			++k;
		}
		if (visita.getJueves() == 1) {
			diasSeleccionados[k] = "4";
			++k;
		}
		if (visita.getViernes() == 1) {
			diasSeleccionados[k] = "5";
			++k;
		}
		if (visita.getSabado() == 1) {
			diasSeleccionados[k] = "6";
			++k;
		}
	}
	
	public String btnAtras(){
		String result = null;
		
		return result;
	}
	
	public String btnSalir(){
		String result = null;
		result = "index.xhtml";
		return result;
	}

	//--- GET AND ---
	public SucursalVO getSucursal() {
		return sucursal;
	}

	public String getTitulo() {
		return titulo;
	}

	public String[] getDiasSeleccionados() {
		return diasSeleccionados;
	}

	public void setDiasSeleccionados(String[] diasSeleccionados) {
		this.diasSeleccionados = diasSeleccionados;
	}

	public VisitaVO getVisita() {
		return visita;
	}

	public void setVisita(VisitaVO visita) {
		this.visita = visita;
	}

	public SujetoVO getSujeto(){
		return sujeto;
	}
	//---------------
	
}
